home *** CD-ROM | disk | FTP | other *** search
-
- func void GatewayConnect()
- {
- if (!g_stGateway.m_pClient)
- {
- g_stGateway.m_pClient = NetClient_Create( g_stGateway.m_szIP, g_stGateway.m_iPort, MSGatewayInterface, MSGatewayConnectCB, MSGatewayDisconnectCB);
- }
- }
-
-
- // **********************
- // *** network callbacks
- // **********************
-
- func void MSGatewayConnectCB(Net_Client pClient)
- {
- print(">> Connection to Gateway.\n");
- pClient << mGateway_GameDistantLogin(
- g_stGame.m_szLogin,
- g_stGame.m_szPassword,
-
- g_stGame.m_szAdminLogin,
- g_stGame.m_szAdminPassword,
-
- g_stGame.m_iMode);
- }
-
- func void MSGatewayDisconnectCB(Net_Client pClient)
- {
- print(">> Disconnection from Gateway.\n");
- g_stGateway.m_pClient = G_pNullClient;
-
- // try to reconnect in 5s
- CreateTimer(rand(10000),GatewayConnect);
- }
-
- // **********************
- // *** incomming messages
- // **********************
-
-
- // gateway login ok
- func void fnGame_LoginOK()
- {
- print(">> Gateway game login ok\n");
-
- var i32x i, iNumClients;
- var Net_ClientList pClientList;
- var Net_Client pUserClient;
- var i32x iGuestId, iUserId;
- var szx szLogin;
-
- var Net_Client pClient;
- pClient = GetCurrentClient();
-
- // Launch server if needed
- if (!g_pServer)
- {
- g_pServer=NetServer_Create(g_iServerPort,iUserLoginInterface,UserConnectCB,UserDisconnectCB, G_iNumClientList);
- }
-
- if (g_pServer)
- {
- // Read the server port
- g_iServerPort = NetServer_GetPort(g_pServer);
-
- println("--- Server Online on port " + itoa(g_iServerPort));
-
- // ready to proceed
- pClient << mGateway_GameReady(g_iServerPort);
-
- // send connected users
- pClientList = NetServer_GetClientList( g_pServer, G_iRegisteredClientList);
- iNumClients = NetClientList_GetSize(pClientList);
-
- i = 0;
- while (i<iNumClients)
- {
- pUserClient = NetClientList_GetClient(pClientList,i);
- iUserId = NetClient_GetId(pUserClient);
- szLogin = Join_GetStringFromKey(g_stJoins.m_iUser_szLogin,iUserId);
- pClient << mGateway_UserConnection(szLogin);
- i=i+1;
- }
-
- // send connected guests
- pClientList = NetServer_GetClientList( g_pServer, G_iGuestClientList);
- iNumClients = NetClientList_GetSize(pClientList);
-
- i = 0;
- while (i<iNumClients)
- {
- pUserClient = NetClientList_GetClient(pClientList,i);
- iGuestId = NetClient_GetId(pUserClient);
- szLogin = Join_GetStringFromKey(g_stJoins.m_iUser_GuestLogin,-iGuestId);
- pClient << mGateway_UserConnection(szLogin);
- i=i+1;
- }
- }
- else
- {
- println("### ERROR ### unable to bind port " + itoa(g_iServerPort));
- }
- }
-
- // gateway login failed
- func void fnGame_LoginFailed()
- {
- //MenuServer_Exit();
- }
-
-
- // gateway gives user authorization
- func void fnGame_UserAuthorization(szx _szLogin, szx _szAuthorization)
- {
- var Net_Client pClient;
- pClient = GetCurrentClient();
-
- var i32x iUserId;
- iUserId = Join_FindKeyFromStringData( g_stJoins.m_iUser_szLogin, _szLogin);
-
- if (iUserId>0)
- {
- print("Received authorization for user ");print(_szLogin);print(":");println(_szAuthorization);
-
- Join_SetStringFromKey(g_stJoins.m_iUser_szPassword, iUserId,_szAuthorization);
- pClient << mGateway_UserAuthorizationOk(_szLogin,_szAuthorization);
- }
- else
- {
- var i32x iGuestID;
-
- // Find free guest slot
- iGuestID = Join_FindKeyFromIntData(g_stJoins.m_iUser_GuestFree,g_iGUEST_STATUS_Free);
- if(iGuestID > 0)
- {
- // Okay for guest connection
- print("Received authorization for guest user ");
- println(_szLogin);
- println(_szAuthorization);
- println(itoa(iGuestID));
-
- // Fill guest slot
- Join_SetIntFromKey(g_stJoins.m_iUser_GuestFree, iGuestID,g_iGUEST_STATUS_Guest);
- Join_SetStringFromKey(g_stJoins.m_iUser_GuestLogin, iGuestID,_szLogin);
- Join_SetStringFromKey(g_stJoins.m_iUser_GuestPassword, iGuestID,_szAuthorization);
-
- // Inform gateway
- pClient << mGateway_UserAuthorizationOk(_szLogin,_szAuthorization);
- }
- else
- {
- println("Authorization failed for user : ");
- println(_szLogin);
- pClient << mGateway_UserAuthorizationFailed(_szLogin);
- }
- }
- }
-
-
-
-
-
- // gateway kicks out user
- func void fnGame_UserDisconnect(szx _szLogin)
- {
- print("Gateway kicks out user ");
- println(_szLogin);
-
- var i32x iGuestID,iUserId;
- iUserId = Join_FindKeyFromStringData( g_stJoins.m_iUser_szLogin, _szLogin);
- if (iUserId>0)
- {
- // tutu debug : unsubscribed user has no team, no divisiom ?
-
- // find client
- var Net_Client pClient;
- var Net_ClientList pClientList;
- pClientList = NetServer_GetClientList( g_pServer, G_iRegisteredClientList);
- pClient = NetClientList_FindClient(pClientList, iUserId);
- if (pClient)
- NetClient_Disconnect(pClient);
- }
- else
- {
- // User is a guest ?
- iGuestID = Join_FindKeyFromStringData( g_stJoins.m_iUser_szLogin,_szLogin);
- if (iGuestID>0)
- {
- // find client
- var Net_Client pClient;
- var Net_ClientList pClientList;
- pClientList = NetServer_GetClientList( g_pServer, G_iGuestClientList);
- // Guest identifier are negative
- pClient = NetClientList_FindClient(pClientList, -iGuestID);
- if (pClient)
- NetClient_Disconnect(pClient);
- }
- }
- }
-
-
-
-
-